package com.example.study_manger.tools;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;

import java.util.Date;

/**
 * jwt令牌生成与解析
 */
public class JwtUtil {
    private static final String SECRET_KEY = "goudan";  // 使用一个安全的密钥，生产环境下请更换为更强的密钥
    private static final long EXPIRATION_TIME = 86400000; // JWT 过期时间：1天 (24小时)
    // 生成 JWT Token
    public static String generateToken(String username) {
        // 使用 HMAC256 算法生成 JWT
        Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY);
        // 构建 JWT Token
        return JWT.create()
                .withSubject(username)  // 设置 JWT 的主题部分，通常是用户名或用户ID
                .withIssuedAt(new Date())  // 设置 JWT 签发时间
                .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME))  // 设置 JWT 过期时间
                .sign(algorithm);  // 签名
    }
    // 验证 JWT Token 并获取其中的用户名
    public static String verifyToken(String token) {
        // 使用 HMAC256 算法创建 JWT 验证器
        Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY);
        JWTVerifier verifier = JWT.require(algorithm)
                .build();  // 创建一个验证器
        // 验证 token 并获取解码后的 JWT 信息
        DecodedJWT decodedJWT = verifier.verify(token);
        // 返回 JWT 中的用户名（主题部分）
        return decodedJWT.getSubject();
    }
    // 获取 JWT 中的用户名
    public static String getUsernameFromToken(String token) {
        DecodedJWT decodedJWT = JWT.decode(token);
        return decodedJWT.getSubject();  // 获取主题部分，也就是用户名
    }
}

